/*
 * DefaultLibrary.java 18 janv. 2013
 *
 * Sweet Home 3D, Copyright (c) 2013 Emmanuel PUYBARET / eTeks <info@eteks.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
package com.eteks.sweethome3d.io;

import java.util.MissingResourceException;
import java.util.ResourceBundle;

import com.eteks.sweethome3d.model.Library;

/**
 * Basic implementation of an immutable library initialized from the properties of a resource bundle.
 * @author Emmanuel Puybaret
 * @since 4.0  
 */
class DefaultLibrary implements Library
{
	private static final String ID = "id";
	private static final String NAME = "name";
	private static final String DESCRIPTION = "description";
	private static final String VERSION = "version";
	private static final String LICENSE = "license";
	private static final String PROVIDER = "provider";
	
	private final String location;
	private final String type;
	private final String id;
	private final String name;
	private final String description;
	private final String version;
	private final String license;
	private final String provider;
	
	/**
	 * Initializes a library from the given parameters.
	 */
	public DefaultLibrary(String location, String type, String id, String name, String description, String version,
			String license, String provider)
	{
		this.location = location;
		this.type = type;
		this.id = id;
		this.name = name;
		this.description = description;
		this.version = version;
		this.license = license;
		this.provider = provider;
	}
	
	/**
	 * Initializes a library from the values of the <code>id</code>, <code>name</code>, 
	 * <code>description</code>, <code>version</code>, <code>license</code> and 
	 * <code>provider</code> keys in the given resource bundle.
	 */
	public DefaultLibrary(String location, String type, ResourceBundle resource)
	{
		this.location = location;
		this.type = type;
		this.id = getOptionalString(resource, ID);
		this.name = getOptionalString(resource, NAME);
		this.description = getOptionalString(resource, DESCRIPTION);
		this.version = getOptionalString(resource, VERSION);
		this.license = getOptionalString(resource, LICENSE);
		this.provider = getOptionalString(resource, PROVIDER);
	}
	
	private String getOptionalString(ResourceBundle resource, String propertyKey)
	{
		try
		{
			return resource.getString(propertyKey);
		}
		catch (MissingResourceException ex)
		{
			return null;
		}
	}
	
	/**
	 * Returns the location where this library is stored.
	 */
	public String getLocation()
	{
		return this.location;
	}
	
	/**
	 * Returns the id of this library.
	 */
	public String getId()
	{
		return this.id;
	}
	
	/**
	 * Returns the type of this library.
	 */
	public String getType()
	{
		return this.type;
	}
	
	/**
	 * Returns the name of this library.
	 */
	public String getName()
	{
		return this.name;
	}
	
	/**
	 * Returns the description of this library.
	 */
	public String getDescription()
	{
		return this.description;
	}
	
	/**
	 * Returns the version of this library.
	 */
	public String getVersion()
	{
		return this.version;
	}
	
	/**
	 * Returns the license of this library.
	 */
	public String getLicense()
	{
		return this.license;
	}
	
	/**
	 * Returns the provider of this library.
	 */
	public String getProvider()
	{
		return this.provider;
	}
}
